home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / game / 2play / freeciv.lha / freeciv / README.rulesets < prev    next >
Text File  |  1999-01-30  |  14KB  |  337 lines

  1. ----------------------------------------------------------------------
  2. Freeciv Rulesets, by David Pfitzner, dwp@mso.anu.edu.au
  3. ----------------------------------------------------------------------
  4.  
  5. Quickstart:
  6. -----------
  7.  Rulesets allow modifiable sets of data for units, advances, 
  8.  improvements, and wonders, without requiring recompilation, in a way
  9.  which is consistent across a network and through savegames.  (In the
  10.  future there could be other categories of rulesets, eg terrain, 
  11.  governments?)
  12.  
  13. - To play freeciv normally: don't do anything special; the new
  14.   features all have defaults which give the standard freeciv 
  15.   behaviour.
  16.  
  17. - To play a game with rules more like Civ1, start the server with:
  18.        ./ser -r data/civ1.serv
  19.   (and any other command-line arguments you normally use; depending on
  20.   how you have freeciv installed you may have to give the installed
  21.   data directory path instead of "data").  
  22.   Start the client normally, using a client compiled from a source 
  23.   distribution which includes rulesets.  A non-rulesets-aware client 
  24.   will be rejected if it tries to connect to a rulesets-aware server,
  25.   and vice-versa.  
  26.   Note that the freeciv AI might not play as well with rules other
  27.   than standard-freeciv.  (See notes below.)
  28.  
  29. The rest of this file contains:
  30.  
  31. - More detailed information on creating and using custom/mixed 
  32.   rulesets.
  33.  
  34. - Information on implementation, and notes for further development.
  35.  
  36. ----------------------------------------------------------------------
  37. Using and modifying rulesets:
  38. -----------------------------
  39.  
  40. Rulesets are specified using new server options.  The command above
  41. of "./ser -r data/civ1.serv" just reads a file which sets these 
  42. options (as well as a few of the standard server options).  
  43. The new server options are:
  44.  
  45.         techs, units, buildings.
  46.  
  47. They are special server options in that they take string values, but 
  48. otherwise the behave like normal server options.  Eg, try the server 
  49. command "help techs".
  50.  
  51. For each of these options, the value of the option specifies a 
  52. subdirectory of the freeciv data directory, containing a file
  53. name techs.ruleset, units.ruleset, or buildings.ruleset, respectively.
  54.  
  55. Eg, the commands:
  56.    
  57.     set techs default 
  58.     set units civ1
  59.     set buildings custom
  60.  
  61. would specify the files:
  62.  
  63.     data/default/techs.ruleset
  64.     data/civ1/units.ruleset
  65.     data/custom/buildings.ruleset
  66.  
  67. (This is just an example, and may not give very sensible rules; the
  68. directory data/custom and the file data/custom/buildings.ruleset do 
  69. not exist in standard freeciv.)
  70.  
  71. The ruleset files in the data directory are user-editable, so you can
  72. modify them to create modified or custom rulesets (without having to
  73. recompile freeciv).  It is suggested that you _don't_ edit the 
  74. existing files in the "default" and "civ1" directories, but rather 
  75. copy them to another directory and edit the copies.  This is so that 
  76. its clear when you are using modified rules and not the standard ones.
  77.  
  78. The format used in the ruleset files should be fairly 
  79. self-explanatory.  A few points:
  80.  
  81. - The files are not all independent, since eg, units depend on
  82.   advances specified in the techs file.
  83.  
  84. - Wonders and city improvements have a new field, "variant".  This 
  85.   allows limited changes to the effects of specific wonders and 
  86.   improvements, where such changes have been implemented.  The help 
  87.   system (and also the "TODO Variants" section below) specify the 
  88.   variant effects which have been implemented so far.
  89.  
  90. - Units have a new field, "roles", which is like "flags", but 
  91.   determines which units are used in various circumstances of the
  92.   game (rather than intrinsic properties of the unit).
  93.   See comments in common/unit.h
  94.  
  95. - The units file contains 4 tables.  These should all contain the
  96.   same unit names in the same order.
  97.  
  98. - The [unit_adjustments] section of the units file deserves some
  99.   explanation.  It contains the entries:
  100.  
  101.     max_hitpoints, max_firepower, firepower_factor.
  102.  
  103.   The first two entries (unless zero) override the hitpoints and 
  104.   firepower entries in the units.u2 data-table, as a convenience.  
  105.   The value of firepower_factor is used when combat is resolved:
  106.   All combat firepower values are multiplied by firepower_factor,
  107.   which means that the effective hitpoints of any unit is really 
  108.       (hitpoints/firepower_factor).
  109.   Actually, it is these effective hitpoints which are report to the
  110.   client for all hitpoint values.
  111.   (This complicated setup is so that the AI calculations don't 
  112.   blow up when using Civ1 rulesets.)
  113.  
  114. Note that some properties of units, advances, etc are still compiled
  115. in properties (eg, see the TODO section below), so when making custom
  116. rulesets you should aim to make changes as limited as possible, to 
  117. have the best chance of the changes working properly.
  118.  
  119. ----------------------------------------------------------------------
  120. The civstyle option:
  121. --------------------
  122.  
  123. The server option civstyle still exists, but, as before, it doesn't
  124. actually do very much.  Rulesets allows civ1 style rules (to some 
  125. approximation) in a more flexibility way than a single server option.
  126. Potentially the civstyle option could be put to some use in the 
  127. future, for Civ1/Civ2 differences which are not covered by rulesets.
  128.  
  129. ----------------------------------------------------------------------
  130. The AI:
  131. -------
  132.  
  133. An important caveat regarding rulesets is that while rulesets allow 
  134. considerable flexibility, the AI has been designed and tested using 
  135. Civ2 rules.  So the AI may not do as well with modified rules.
  136.  
  137. I've made some changes to the AI to try to take some of the ruleset
  138. changes into account, and I've fudged the combat calculations to try 
  139. to avoid core dumps, but in general you should not expect the AI to 
  140. work as well with non-default options (where Civ1 is definitely 
  141. included in "non-default").
  142.  
  143. Examples of problems which have not been fixed:
  144. - Units not having hitpoints in Civ1 can make a big difference to 
  145.   appropriate combat strategies.  
  146. - City walls are sufficiently different (increased build cost, and 
  147.   upkeep; and effect vs sea) to require different handling?
  148. - Without the Harbour and Offshore Platform improvements, cities with
  149.   many ocean squares are much more limited in Civ1.  
  150. - Wonders which only work on a single continent are not given special
  151.   consideration by the AI.
  152.  
  153. Hopefully this situation can be improved in the future, but the more 
  154. flexible the rules, the harder to write a good AI...
  155.  
  156. ----------------------------------------------------------------------
  157. Implementation details:
  158. -----------------------
  159.  
  160. This section and following section will be mainly of interested to
  161. developers who are familiar with the freeciv source code.
  162.  
  163. Rulesets are mainly implemented in the server.  The server reads the
  164. files, and then sends information to the clients.  Mostly rulesets 
  165. are used to fill in the basic data tables on units etc, but in some
  166. cases some extra information is required.
  167.  
  168. For units and advances, most of the information regarding each unit 
  169. or advance is captured in the data tables, so it may be feasible to 
  170. eventually make them fully customizable.  For improvements and 
  171. wonders, each one has a largely unique effect, so the effects 
  172. themselves are still hardwired in the code.  The "variant" field now 
  173. allows some flexibility, though the effects themselves must still be 
  174. hard-coded.
  175.  
  176. ----------------------------------------------------------------------
  177. Changes outline:
  178. ----------------
  179.  
  180. Server options: Server options can now optionally be string-valued.  
  181. Three new string valued options to specify rulesets.
  182.  
  183. Loading rulesets: New files server/ruleset.[ch] to read in the 
  184. ruleset files, and functions for sending the data to clients.  Moved 
  185. datafilename from client/climisc to common/shared so the server can 
  186. use it.  (And related changes to ser script and Makefiles.)
  187.  
  188. Communication: New and modified packets and related functions and 
  189. cases.  (The game_info packet has been extended, which is ok because
  190. capabilities ensure only ruleset-aware clients and servers are 
  191. allowed to talk to each other.)
  192.  
  193. Variants: Added variant field to "struct improvement_type"; it gets 
  194. set with the other fields when rulesets are loaded.  Scattered 
  195. changes to implement the new variant effects.  Added a new widget in 
  196. the help for wonders and improvements to show variant value, and new 
  197. help text to describe each variant.
  198.  
  199. Roles: Added roles field to "struct unit_type".  Added new functions
  200. in unit.c to make it easy to select units with given flag or give
  201. role.  Made unit flag macros into an enumerated type which is only
  202. converted into bit-masks internally.
  203.  
  204. Expanded "struct civ_game": Strings for the new server options, and 
  205. miscellaneous ruleset information which doesn't go into the data
  206. tables.
  207.  
  208. Obsoleted: Removed hardwired data tables for advances, unit_types, 
  209. and improvement_types.  They are not considered useful as a fallback,
  210. because then they may not be what the user wants.  
  211. Removed set_civ_style() and related functions, since their effect
  212. is now achieved by rulesets.
  213.  
  214. Remove hardwiring: various scattered changes to reduce cases of techs,
  215. tech requirements, etc being hardwired, to reduce breakage if tables
  216. are modified. 
  217.  
  218. Client-side continents:  Added functions to calculate continents from
  219. the point of view of the client, for continent-based wonder effect 
  220. variants.  If the client gets continents wrong (due to connecting 
  221. tiles being unknown), it might for example let you build a power 
  222. plant when it should be wonder-replaced by Hoover Dam.  But the 
  223. effects will still be server-calculated, and hence take into account 
  224. correct continents.
  225. (I'm not sure if this is the best solution, but it's better (for
  226. this) than the client having no idea about continents.  Maybe the
  227. city_info packet should specify which improvements are obsolete or 
  228. wonder-replaced...?)
  229.  
  230. ----------------------------------------------------------------------
  231. TODO:
  232. -----
  233.  
  234. - More improvement and wonder variants for Civ1 (see next section).
  235. - Other alternative (non-Civ1) variants?  (If desired.)
  236.  
  237. - Could un-hardwire the advances required for: 
  238.   bridges, railroad, fortress, government types.
  239.  
  240. - Could unhardwire effect of Mysticism on Temples;
  241.   (Any other advances which affect building effects?)
  242. - List of advances which affect trade routes revenue.
  243. - List of advances which increase population-based pollution.
  244.  
  245. - Work on making the AI handle non-default cases better.
  246. - Could have other information to help the AI?
  247.   Eg, scores for units/techs/buildings, to help the AI know which 
  248.   ones to prefer?
  249.  
  250. - Rulesets for: terrain, governments, ... ??
  251.  
  252. - Should generalise improvements and wonders better than 
  253.   using variants, which are still largely hardwired.
  254.  
  255. ----------------------------------------------------------------------
  256. TODO Variants: 
  257. --------------
  258.  
  259. First, those variants which have been implemented:
  260. (Note Variant=0 should always be "standard-freeciv" effect.)
  261.  
  262. Barracks:     Variant=0: just works for ground units (Civ2)
  263.          Variant=1: works also for air and sea units (Civ1)
  264. Barracks II, Barracks III, Sun Tzu:
  265.          These use the same variant value and effect as
  266.          Barracks.
  267. City Walls:      Variant=0: only applies against land and heli units
  268.          Variant=1: applies against sea units too
  269. Police Station:  This uses the same variant value and effect as 
  270.          Women's Suffrage (see below).
  271.  
  272. Pyramids:     Variant=0: counts as Granary in every city (Civ2)
  273.          Variant=1: allows all government types and there is 
  274.                 no transition anarchy (Civ1)
  275. United Nations:  Variant=0: units regain extra hp per turn (freeciv)
  276.          Variant=1: allows all government types and there is 
  277.                 no transition anarchy (Civ1) (see note(*))
  278. Hoover Dam:     Variant=0: works on all cities owned
  279.          Variant=1: only works for cities on the same 
  280.                 continent as where the wonder is built
  281. J.S. Bach:     Variant=0: works on all cities owned
  282.          Variant=1: only works for cities on the same 
  283.                 continent as where the wonder is built
  284. Women's Suff.:   Variant=0: -1 unit-unhappy per City (-2 under 
  285.                 Democracy) (freeciv)
  286.              Variant=1: -1 unit-unhappy per Unit (Civ1)
  287. Magellan's Exp.: Variant=0: gives sea units 2 extra move points
  288.          Variant=1: gives sea units only 1 extra move point
  289. Great Wall:     Uses same variant and effect as City Walls.
  290.  
  291. Other differences between Civ1 and Civ2/freeciv which have not been
  292. implemented as variants:
  293.  
  294. Copernicus' Obs.: freeciv: science output +50% in a city
  295.           Civ1:    doubles knowledge production in city, after
  296.                all other effects.
  297. Isaac Newton's:   freeciv: science output +100% in a city
  298.           Civ1:    "increases effects of Libraries and 
  299.                Universities" - by how much??
  300. Michelangelo's:   freeciv: same as a Cathedral in every city
  301.           Civ1:     "increases effect of cathedrals" - by
  302.                 how much??
  303.  
  304. There are other more minor Civ1/Civ2/freeciv differences, which 
  305. could be handled using variants, for:
  306.     Courthouse 
  307.     Cure For Cancer
  308.     Hanging Gardens
  309.     Lighthouse
  310.  
  311. Notes:
  312.  
  313. Aqueduct and Sewer System: 
  314.    The maximum sizes for cities without these improvements is handled 
  315. separately, without using variants.  This leaves variants available 
  316. if some other effects are desired.
  317.  
  318. Colosseum, Cathedral:
  319.    Note that the technology effects on the effectiveness of Cathedrals
  320. and Colosseums are not handled by variants, but by specially noting
  321. the techs; see game.rtech fields cathedral_plus, cathedral_minus, 
  322. and colosseum_plus.  Similar could be done for Temple and Mysticism 
  323. (but there Civ1 is the same, and the AI calcs are complicated by 
  324. the Oracle, which also affects Temples).
  325.  
  326. (*) United Nations: 
  327.     I'm not sure what to do here: the diplomatic effect of Civ1,Civ2 
  328. isn't appropriate for multiplayer freeciv, and the hp effect of 
  329. freeciv isn't appropriate for Civ1 (no hitpoints).  The govchange 
  330. effect seems reasonable -- note there is no Statue of Liberty in 
  331. Civ1, and Pyramids, which has the same effect in Civ1, becomes 
  332. obsolete.  Alternatively a Suffrage-like effect would seem sensible: 
  333. your population is more willing to go to war if it has the sanction 
  334. of the United Nations!
  335.  
  336. ----------------------------------------------------------------------
  337.